home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / News / Alexandra.0.82 / Source / NiceStuff.subproj / KVPair.m < prev    next >
Encoding:
Text File  |  1996-01-30  |  3.2 KB  |  182 lines

  1.  
  2. #import "KVPair.h"
  3.  
  4. #define NoNULL(string) ((string==NULL)?"":string)
  5.  
  6.  
  7. @implementation KVPair
  8.  
  9. //-----------------------------------------------------------
  10. // IDENTIFIERS
  11. //-----------------------------------------------------------
  12.  
  13. + (NXAtom)keyIdentifier;
  14.     {
  15.     return NXUniqueString("KVKeyIdentifier");
  16.     }
  17.     
  18.  
  19. + (NXAtom)valueIdentifier;
  20.     {
  21.     return NXUniqueString("KVValueIdentifier");
  22.     }
  23.  
  24.  
  25. //-----------------------------------------------------------
  26. // INIT & FREE
  27. //-----------------------------------------------------------
  28.  
  29. - init:(const char *)kv delimiter:(char)del;
  30.     {
  31.     char    *buf,*p;
  32.     
  33.     [self init];
  34.     buf=NXCopyStringBufferFromZone(kv,[self zone]);
  35.     if(p=strchr(buf,(int)del))
  36.         {
  37.         *p='\0'; p++;
  38.         [self setKey:buf];
  39.         [self setValue:p];
  40.         }
  41.     
  42.     NXZoneFree([self zone],buf);
  43.     return self;
  44.     }
  45.  
  46.  
  47. - initKey:(const char *)aKey value:(const char *)aValue;
  48.     {
  49.     [self init];
  50.     [self setKey:aKey];
  51.     [self setValue:aValue];
  52.     return self;
  53.     }
  54.  
  55.  
  56. - init;
  57.     {
  58.     [super init];
  59.     key=[[MiscString allocFromZone:[self zone]] init];
  60.     value=[[MiscString allocFromZone:[self zone]] init];
  61.     return self;
  62.     }
  63.     
  64.     
  65. - free
  66.     {
  67.     key=[key free];
  68.     value=[value free];
  69.     return [super free];
  70.     }
  71.     
  72.     
  73. //-----------------------------------------------------------
  74. // COPY 
  75. //-----------------------------------------------------------
  76.     
  77. - copyFromZone:(NXZone *)zone;
  78.     {
  79.     KVPair    *new=[super copyFromZone:zone];
  80.     
  81.     new->key=[key copyFromZone:zone];
  82.     new->value=[value copyFromZone:zone];
  83.     return new;
  84.     }
  85.     
  86.     
  87. //-----------------------------------------------------------
  88. // KEY 
  89. //-----------------------------------------------------------
  90.  
  91. - setKey:(const char *)string;
  92.     {
  93.     [key setStringValue:string];
  94.     [key trimWhiteSpaces];
  95.     return self;
  96.     }
  97.  
  98. - takeKeyFrom:anObject
  99.     {
  100.     return [self setKey:[anObject stringValue]];
  101.     }
  102.     
  103. - (const char *)key;
  104.     {
  105.     const char    *p=[key stringValue];
  106.     
  107.     return NoNULL(p);
  108.     }
  109.     
  110.  
  111. //-----------------------------------------------------------
  112. // VALUE 
  113. //-----------------------------------------------------------
  114.  
  115. - setValue:(const char *)string;
  116.     {
  117.     [value setStringValue:string];
  118.     [value trimWhiteSpaces];
  119.     return self;
  120.     }
  121.  
  122. - takeValueFrom:anObject
  123.     {
  124.     return [self setValue:[anObject stringValue]];
  125.     }
  126.     
  127. - (const char *)value;
  128.     {
  129.     const char    *p=[value stringValue];
  130.     
  131.     return NoNULL(p);
  132.     }
  133.  
  134.  
  135. //-----------------------------------------------------------
  136. //    MiscTCRow Protocol
  137. //-----------------------------------------------------------
  138.  
  139. - (void *)insertKey:(const void *)aKey value:(void *)aValue;
  140.     {
  141.     if(aKey==[KVPair keyIdentifier])
  142.         [self setKey:aValue];
  143.     else if(aKey==[KVPair valueIdentifier])
  144.         [self setValue:aValue];
  145.     return self;
  146.     }
  147.  
  148.  
  149. - (void *)valueForKey:(const void *)aKey;
  150.     {
  151.     const void *ret=NULL;
  152.  
  153.     if(aKey==[KVPair keyIdentifier])
  154.         ret=[self key];
  155.     else if(aKey==[KVPair valueIdentifier])
  156.         ret=[self value];
  157.     return (void *)ret;
  158.     }
  159.  
  160.  
  161. //-----------------------------------------------------------
  162. // TEST WHETHER EMPTY 
  163. //-----------------------------------------------------------
  164.  
  165. - (BOOL)isNull;
  166.     {
  167.     return [key emptyString];
  168.     }
  169.  
  170.  
  171. - (BOOL)hasValue;
  172.     {
  173.     return (![key emptyString] && ![value emptyString]);
  174.     }
  175.     
  176.  
  177. //-----------------------------------------------------------
  178. // THAT'S IT
  179. //-----------------------------------------------------------
  180.  
  181. @end
  182.